package com.boarsoft.boar.batch.bean;

import com.boarsoft.boar.batch.entity.BatchExecution;

import java.util.HashMap;
import java.util.Map;

/**
 * 全局批次运行状态缓存对象。
 *
 *  执行类型： batchExeTypeCache
 *  执行状态： batchStsCache
 *
 * @author zj_wangt
 */
public class BatchExecCtrlFlag {

    /**
     * 批次执行类型缓存对象:
     *      0-新跑
     *      1-续跑
     *      2-重跑
     */
    private static volatile Map<String, Short> batchExeTypeCache = new HashMap<String, Short>();

    /**
     * 批次執行状态缓存对象
     *      0-未入队
     *      1-等待执行
     *      2-执行中
     *      3-完成
     *      4-失败
     *      5-挂起
     *      6-暂停中
     *      7-暂停          *
     *      8-超时
     *      10-取消中
     *      11-取消         *
     */
    private static volatile Map<String, Short> batchStsCache = new HashMap<String, Short>();

    public static Short getStatus(String batchNo) {
        if (batchStsCache.containsKey(batchNo)) {
            return batchStsCache.get(batchNo);
        } else {
            return BatchExecution.STATUS_NEW;
        }
    }

    public static Short setStatus(String batchNo, Short status) {
        batchStsCache.put(batchNo, status);
        return status;
    }

    public static void removeStatus(String batchNo) {
        if (batchStsCache.containsKey(batchNo)) {
            batchStsCache.remove(batchNo);
        }
    }

    public static Short getExeType(String batchNo) {
        if (batchExeTypeCache.containsKey(batchNo)) {
            return batchExeTypeCache.get(batchNo);
        } else {
            return BatchExecution.TYPE_START;
        }
    }

    public static Short setExeType(String batchNo, Short status) {
        batchExeTypeCache.put(batchNo, status);
        return status;
    }

    public static void removeExeType(String batchNo) {
        if (batchExeTypeCache.containsKey(batchNo)) {
            batchExeTypeCache.remove(batchNo);
        }
    }

    public static void clearAllStatus() {
        batchStsCache.clear();
    }

    public static void clearAllExeType() {
        batchExeTypeCache.clear();
    }

}
